package com.hou.netty.udp.server;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelOption;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;

public class UdpServer {
    /*
     * UDP没有连接，只监听端口
     * UDP 无法从Channel获取远程客户端的ip和端口号，
     * 而是通过发过来的DatagramPacket中的sender获取发送消息客户端的ip和端口号
     * UDP不需要粘包拆包，每个包都是完整的
     * netty UDP一般接收的是DatagramPacket包，里面封装了消息对象
     * */
    public void run(int port) throws Exception {
        NioEventLoopGroup group = new NioEventLoopGroup();
        Bootstrap bootstrap = new Bootstrap();//udp不能使用ServerBootstrap
        bootstrap.group(group).channel(NioDatagramChannel.class)//udp通道
                .option(ChannelOption.SO_BROADCAST, true) //允许发送广播
                .handler(new UdpServerHandler());//服务端业务处理
        //绑定端口                        //等待端口关闭
        bootstrap.bind(port).sync().channel().closeFuture().sync();
    }

    public static void main(String[] args) throws Exception {
        new UdpServer().run(9527);//绑定端口,启动服务
        new UdpServer().run(9528);
    }
}
